package org.nanfang.shuiguo01;

import java.util.LinkedList;

/*
* 篮子 -- 装水果*/
public class Box {
//    蓝子容器
    private  LinkedList<Fruit> boxLink = new LinkedList<>();
//    定义常量 -- 表达篮子最大的容量
    private  static final int Max_SIze = 5;
//    男孩放入水果  -- 放入了什么水果
    public synchronized void put(String name , Fruit fruit){
        //篮子满了的情况
        while (boxLink.size() == Max_SIze){
            System.out.println("水果满了");
            //通知女孩吃水果
//            this.notify();
            //通知所有女孩吃水果

            //男孩在停止摘水果
            try {
                this.wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }

        //情况二  :  篮子未满的情况 -- 摘水果 -- 进入等待状态
        boxLink.add(fruit);
        System.out.printf("当前篮子的容量：[%d]，男孩子：[%s]，摘的水果是：[%s] %n", boxLink.size(), name, fruit);
        this.notifyAll();
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
//    女孩取水果
    public synchronized void take(String naem){
//篮子满了的情况
        while (boxLink.isEmpty()){
            System.out.println("篮子没有水果了");
            //通知男孩摘水果
//            this.notify();
            //通知所有男孩摘水果

            //女孩停止吃水果
            try {
                this.wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }


        //情况二  :  篮子有水果的情况 -- 把篮子中最后放的水果移除
        Fruit delfruit = boxLink.removeLast();
        System.out.printf("当前篮子的容量：[%d]，女孩子：[%s]，吃的水果是：[%s] %n", boxLink.size(), naem, delfruit);
        this.notifyAll();
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}
